package com.c2b.algorithm.leetcode.base;

import java.util.HashSet;
import java.util.Set;

/**
 * <a href='https://leetcode.cn/problems/number-of-different-integers-in-a-string/'>字符串中不同整数的数目(Number of Different Integers in a String)</a>
 * <p>给你一个字符串 word ，该字符串由数字和小写英文字母组成。</p>
 * <p>请你用空格替换每个不是数字的字符。例如，"a123bc34d8ef34" 将会变成 " 123  34 8  34" 。注意，剩下的这些整数为（相邻彼此至少有一个空格隔开）："123"、"34"、"8" 和 "34" 。</p>
 * <p>返回对 word 完成替换后形成的 不同 整数的数目。</p>
 * <p>只有当两个整数的 不含前导零 的十进制表示不同， 才认为这两个整数也不同。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：word = "a123bc34d8ef34"
 *      输出：3
 *      解释：不同的整数有 "123"、"34" 和 "8" 。注意，"34" 只计数一次。
 *
 * 示例 2：
 *      输入：word = "leet1234code234"
 *      输出：2
 *
 * 示例 3：
 *      输入：word = "a1b01c001"
 *      输出：1
 *      解释："1"、"01" 和 "001" 视为同一个整数的十进制表示，因为在比较十进制值时会忽略前导零的存在。
 * </pre>
 * </p>
 * <p>
 * <b>提示：</b>
 * <ul>
 *     <li>1 <= word.length <= 1000</li>
 *     <li>word 由数字和小写英文字母组成</li>
 * </ul>
 * </p>
 *
 * @author c2b
 * @since 2024/1/18 15:02
 */
public class LC1805NumberOfDifferentIntegersInString_S {
    static class Solution {
        public int numDifferentIntegers(String word) {
            int leftIndex = 0;
            int rightIndex;
            Set<String> cnt = new HashSet<>();
            while (leftIndex < word.length()) {
                if (isDigit(word.charAt(leftIndex))) {
                    rightIndex = leftIndex;
                    while (rightIndex < word.length() && isDigit(word.charAt(rightIndex))) {
                        ++rightIndex;
                    }
                    // 去除前导 0
                    while (rightIndex - leftIndex > 1 && word.charAt(leftIndex) == '0') {
                        ++leftIndex;
                    }
                    cnt.add(word.substring(leftIndex, rightIndex));
                    leftIndex = rightIndex + 1;
                } else {
                    ++leftIndex;
                }
            }
            return cnt.size();
        }

        private boolean isDigit(char ch) {
            return ch >= '0' && ch <= '9';
        }
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.numDifferentIntegers("a123bc34d8ef34"));
        System.out.println(solution.numDifferentIntegers("leet1234code234"));
        System.out.println(solution.numDifferentIntegers("a1b01c001"));
        System.out.println(solution.numDifferentIntegers("gi851a851q8510v"));
        System.out.println(solution.numDifferentIntegers("0a0"));
    }
}
